/******************************************************************************
 *
 * @file       global.h
 * @brief      一些公共的头文件和变量、回调函数、枚举类型声明
 *
 * @author     ario
 * @date       2024/05/14
 * @history
 *****************************************************************************/

#ifndef GLOBAL_H
#define GLOBAL_H

#include <QDebug>
#include <QDir>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
#include <QString>
#include <QStyle>
#include <QWidget>
#include <functional>
#include <memory>

extern std::function<void(QWidget *)> repolish;
extern std::function<QString(QString)> xorString;
extern QString gate_url_prefix;

// 请求id
enum ReqId {
    ID_GET_VARIFY_CODE = 1001,        // 获取验证码请求
    ID_REG_USER = 1002,               // 注册用户请求
    ID_RESET_PWD = 1003,              // 重置密码请求
    ID_LOGIN_USER = 1004,             // 用户登录请求
    ID_CHAT_LOGIN = 1005,             // 登录聊天服务器请求
    ID_CHAT_LOGIN_RSP = 1006,         // 登录聊天服务器回包
    ID_SEARCH_USER_REQ = 1007,        //用户搜索请求
    ID_SEARCH_USER_RSP = 1008,        //用户搜索回包
    ID_ADD_FRIEND_REQ = 1009,         //添加好友请求
    ID_ADD_FRIEND_RSP = 1010,         //添加好友回包
    ID_NOTIFY_ADD_FRIEND_REQ = 1011,  //通知用户添加好友申请
    ID_AUTH_FRIEND_REQ = 1013,  //认证好友请求
    ID_AUTH_FRIEND_RSP = 1014,  //认证好友回复
    ID_NOTIFY_AUTH_FRIEND_REQ = 1015, //通知用户认证好友申请
    ID_TEXT_CHAT_MSG_REQ  = 1017,  //文本聊天信息请求
    ID_TEXT_CHAT_MSG_RSP  = 1018,  //文本聊天信息回复
    ID_NOTIFY_TEXT_CHAT_MSG_REQ = 1019, //通知用户文本聊天信息
};

// 模块
enum Modules {
    REGISTERMOD = 0,  // 注册模块
    RESETMOD = 1,     // 重置密码模块
    LOGINMOD = 2,     // 登录模块
};

// Http通信错误码
enum ErrorCodes {
    SUCCESS = 0,     // 成功
    ERR_JSON = 1,    // Json解析失败
    ERR_NETWORK = 2  // 网络错误
};

// 输入框错误码
enum TipErr { TIP_SUCCESS = 0, TIP_USER_ERR = 1, TIP_EMAIL_ERR = 2, TIP_PWD_ERR = 3, TIP_CONFIRM_ERR = 4, TIP_PWD_CONFIRM_ERR = 5, TIP_VERIFY_ERR = 6 };

// ClickedLabel状态
enum ClickLbState {
    Normal = 0,   // 普通状态
    Selected = 1  // 选中状态
};

// 聊天服务器信息
struct ServerInfo
{
    QString Host;   // 服务器ip地址
    QString Port;   // 服务器端口号
    QString Token;  // 用户Token
    int Uid;        // 用户id
};

// 聊天界面的几种模式
enum ChatUIMode {
    SearchMode,   // 搜索模式
    ChatMode,     // 聊天内容模式
    ContactMode,  // 联系人模式
};

//自定义QListWidgetItem的几种类型
enum ListItemType {
    CHAT_USER_ITEM,     //聊天用户
    CONTACT_USER_ITEM,  //联系人用户
    SEARCH_USER_ITEM,   //搜索到的用户
    ADD_USER_TIP_ITEM,  //提示添加用户
    INVALID_ITEM,       //不可点击条目
    GROUP_TIP_ITEM,     //分组提示条目
    LINE_ITEM,          //分割线
    APPLY_FRIEND_ITEM,  //好友申请
};

// 聊天气泡所属角色
enum ChatRole { Self, Other };

// 聊天气泡结构体
struct MsgInfo
{
    QString msgFlag;  // "text"、"image"、"file"
    QString content;  // 表示文件和图像的url，文本信息
    QPixmap pixmap;   // 文件和图片的缩略图
};

//申请好友标签输入框最低长度
const int MIN_APPLY_LABEL_ED_LEN = 40;
const QString add_prefix = "添加标签 ";
const int tip_offset = 5;

extern std::vector<QString> strs;
extern std::vector<QString> heads;
extern std::vector<QString> names;

const int CHAT_COUNT_PER_PAGE = 13;

#endif  // GLOBAL_H
